package com.wei.czz.framework.security.entity;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.wei.czz.common.enums.CommonEnum;
import com.wei.czz.common.po.UserPo;
import com.wei.czz.common.po.admin.accessToken.UserAccessTokenPo;
import com.wei.czz.common.tool.BaseEntity;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;

import java.util.*;

/**
 * Created by IntelliJ IDEA.
 *
 * @author wei
 * date: 2022-05-01 22:20:58
 * className: SecurityUser 安全框架用户信息类
 * version: 1.0
 * description:
 */
@Getter
@Setter
@Accessors(chain = true)
public class SecurityUser extends BaseEntity {

    /**
     * 用户信息对象
     */
    private UserPo userPo;

//    /**
//     * 用户登录ip地址
//     */
//    private String loginIp;

//    /**
//     * 过期时间（时间戳）
//     */
//    private Long expireTime;
//
//    /**
//     * 登录生成的令牌
//     */
//    private String token;

    /**
     * 用户访问令牌
     */
    private UserAccessTokenPo accessToken;

    /**
     * 用户访问令牌列表
     */
    private List<UserAccessTokenPo> accessTokenList;

    /**
     * 用户关联权限标识集合
     */
    private Set<String> permitSet;

    /**
     * 用户关联角色键集合
     */
    private Set<String> roleKeySet;

    /**
     * 是否超级管理员
     */
    private Boolean superManager;

    @JsonIgnore
    public Long getUserId() {
        return userPo.getUserId();
    }

    @JsonIgnore
    public String getUsername() {
        return userPo.getUsername();
    }

    /**
     * 用户是否被锁定
     * @return true-正常 false-用户被锁定
     */
    @JsonIgnore
    public boolean isAccountNonLocked() {
        return userPo.getStatus().equals(CommonEnum.ZERO.getValue());
    }

    /**
     * 认证是否过期
     * @return true-没有过期 false-认证过期
     */
    @JsonIgnore
    public boolean isCredentialsNonExpired() {
        return Optional.ofNullable(accessToken)
                .filter(accessTokenPo -> accessTokenPo.getAccessExpireTime() > System.currentTimeMillis())
                .isPresent();
    }

}
